﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using MemoryDuosRankings;

namespace MemoryDuosInterfaz
{
    public partial class PartidaMedia : Form
    {
        private Button[,] arrayBotones;
        private DAL dal;
        private List<Coordenadas> destapadas;
        private Ranking partida;
        private Tablero tablero;
        private TimeSpan TiempoActual;
        private TimeSpan TiempoInactivo;

        private Publicidad Publi { get; set; }

        public PartidaMedia()
        {
            InitializeComponent();
        }

        public PartidaMedia(Tablero tablero)
            : this()
        {
            this.tablero = tablero;
            arrayBotones = new Button[tablero.Alto, tablero.Ancho];
            dal = DAL.Instance;
            crearArrayBotones();
            destapadas = new List<Coordenadas>();
            tablero.ArrayBotones = arrayBotones;
            TiempoActual = new TimeSpan();
            Publi = new Publicidad(banner);
            partida = tablero.Partida;
            TiempoInactivo = new TimeSpan();
        }

        private void almacenarCoordenadasParejasLista(Coordenadas coordenadas)
        {
            destapadas.Add(coordenadas);
        }

        private void button21_Click(object sender, EventArgs e)
        {
            tablero.PausarPartida(TiempoActual);
            this.Close();
        }

        private void crearArrayBotones()
        {
            //Estoy mu loco!!!!!!!!!!!
            arrayBotones = new Button[,] {
            { button1, button6, button11, button16},
            { button2, button7, button12, button17},
            { button3, button8, button13, button18},
            { button4, button9, button14, button19},
            { button5, button10, button15, button20}
            };
        }

        private void destaparCarta(object sender, EventArgs e)
        {
            tablero.destaparCarta(sender, e, timerCartas, timerInactividad, TiempoActual, this);
            TiempoInactivo = new TimeSpan();
            if (timerCronometro.Enabled == false) { timerCronometro.Start(); }
        }

        private void PartidaMedia_Close(object sender, FormClosingEventArgs e)
        {
            if (dal.HayPartidaSinFinalizar())
            {
                var resultado = MessageBox.Show("Quieres guardar la partida que estabas jugando?", "MemoryDuos",
                    MessageBoxButtons.YesNoCancel);
                if (resultado == DialogResult.Yes)
                {
                    tablero.PausarPartida(TiempoActual);
                }
                else if (resultado == DialogResult.No)
                {
                    dal.EliminarRanking(partida);
                }
                else e.Cancel = true;
            }
        }

        private void PartidaMedia_Load(object sender, EventArgs e)
        {
            if (!dal.HayPartidaSinFinalizar())
            {
                partida.Tiempo = new TimeSpan();
                partida.ID = dal.AñadirRanking(tablero.Partida);
                tablero.Partida = partida;
            }
            else
            {
                TiempoActual = tablero.Partida.Tiempo;
                tablero.Partida = partida;
                tablero.ActualizarEstadoPartida();
            }
        }

        private void taparCartas(Coordenadas c1, Coordenadas c2)
        {
            tablero.TaparCartas(c1, c2);
        }

        private void timerCartas_Tick(object sender, EventArgs e)
        {
            tablero.TaparCartasDiferentes((Timer)sender);
        }

        private void timerCronometro_Tick(object sender, EventArgs e)
        {
            if (!tablero.EsFinPartida())
            {
                TiempoActual = TiempoActual.Add(new TimeSpan(0, 0, 1));
                TiempoInactivo = TiempoInactivo.Add(new TimeSpan(0, 0, 1));
                labelTiempo.Text = TiempoActual.ToString().Substring(3);
                tablero.Partida.Tiempo = TiempoActual;
                if (TiempoInactivo.Seconds == 20) { timerCronometro.Stop(); }
            }
            else timerCronometro.Stop();
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            Publi.cargarEnlaces();
        }

        private void pFoto_MouseEnter(object sender, EventArgs e)
        {
        }

        private void pFoto_MouseLeave(object sender, EventArgs e)
        {
        }

        private void PartidaMedia_FormClosed(object sender, FormClosedEventArgs e)
        {
            var main = new Main();
            main.Show();
        }

        private void timerInactividad_Tick(object sender, EventArgs e)
        {
            tablero.TaparCarta(tablero.destapadas.ElementAt(0));
        }
    }
}